Tile based rendering is a hardware rendering technique where the three-dimensional (3D) geometry for a “rendering pass” is first sorted into the “bins” which correspond to “tiles” in the frame buffer and then each tile is rendered. Tile based rendering hardware derives its efficiency by rendering the full geometry of a render-pass for each tile and keeping the rendering buffers, associated with tiles, in hardware cache. An end-user visible application frame consists of a sequence of “rendering passes”.
Since the tile based renderers derive efficiency from the rendering the full render-pass, they need to buffer up the geometry information for the full render-pass. If the scene is very complex, the allocated buffer storage may not be enough. A graphics driver can try to compensate for this by allocating larger buffers, but then this triggers another problem. In order to maintain the responsiveness of the overall system, it is desirable to minimize the memory footprint of all the running applications. It does not make sense to allocate the same amount of memory for geometry buffers for rendering a widget as it does for rendering a complex 3D scene.
Due to the above trade off, there is no good solution. If too little memory is allocated, the graphics hardware can run out-of-memory and then would have to signal to driver components to add more memory which can result in an end user visible stall. If too much memory is allocated per application, then overall system responsiveness is adversely affected.